package org.bootstrap.types;

import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class RegRules {
    private RegRules() {

    }

    public final static String REG_USER = "^[a-zA-Z0-9]{7,12}$"; // 数字和字母组合 8~12位
    public final static String REG_PASSWORD = "^[A-Z][a-zA-Z0-9]{7,10}$"; // 密码
    public final static String REG_CHINESE = "/^[\u4E00-\u9FA5]+$/";// 汉字
    public final static String REG_UNICODE_CHAR = "[`~!@#$%^&*()+=|{}':;',//[//].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？]";// 特殊字符 不能使用
    public final static String REG_DATE = "^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$";// 时间
    public final static String REG_TOKEN = "^[a-zA-Z0-9.-_]{0,}$";

    /**
     * 字符串正则验证
     *
     * @param reg 正则表达式
     * @param str 被验证的字符串
     * @return bool
     */
    public static boolean validate(String reg, String str) {
        if (StrUtil.isNotEmpty(str)) {
            try {
                return Pattern.matches(reg, str);
            } catch (PatternSyntaxException e) {
                Console.error(e.getDescription());
                return false;
            }
        } else {
            Console.error("文本为空");
            return false;
        }

    }

    public static <T> T reg_filter(String reg, String str, Class<T> clazz) {
        if (StrUtil.isEmpty(str)) {
            return null;
        }
        return (T) str.replaceAll(reg, "");
    }
}
